
#!/bin/bash

# 脚本名称：test_connection.sh
# 作者：yeweijie
# 功能：测试IP地址的连通性、端口开放情况以及服务可用性
# 使用方法：./test_connection.sh <IP> <PORT>
# 示例：./test_connection.sh 192.168.1.10 443
# 注意：确保系统中已安装ping、telnet和curl命令

# 获取系统当前时间
CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S")
echo "脚本运行时间：$CURRENT_TIME"

# 定义颜色变量
GREEN="\033[1;32m"
RED="\033[1;31m"
RESET="\033[0m"

# 检查输入参数个数
if [ $# -ne 2 ]; then
    echo "Usage: $0 <IP> <PORT>"
    exit 1
fi

IP=$1
PORT=$2

# 1. 使用ping命令测试IP是否可达
echo "正在使用ping测试IP: $IP"
 ping -w 1 $IP > /dev/null 2>&1
# ping -c 4 $IP > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo -e "${GREEN}IP $IP 可达${RESET}"
else
    echo -e "${RED}IP $IP 不可达${RESET}"
    exit 1
fi

# 2. 使用telnet测试端口是否开放
echo "正在使用telnet测试IP: $IP 端口: $PORT"
if sleep 1 | echo "" | telnet $IP $PORT 2>&1 | grep "Connected" > /dev/null; then
    echo -e "${GREEN}端口 $PORT 可用${RESET}"
else
    echo -e "${RED}端口 $PORT 不可用${RESET}"
    exit 1
fi

# 3. 使用curl验证IP+端口的回显
echo "正在使用curl测试IP: $IP 端口: $PORT"
if [ "$PORT" -eq 443 ]; then
    # 如果端口是443，使用-k参数（忽略证书验证）
    curl -k https://$IP:$PORT > /dev/null 2>&1
else
    curl http://$IP:$PORT > /dev/null 2>&1
fi

if [ $? -eq 0 ]; then
    echo -e "${GREEN}IP $IP 端口 $PORT 的服务可用${RESET}"
else
    echo -e "${RED}IP $IP 端口 $PORT 的服务不可用${RESET}"
fi


